package com.windchime.blog.service;

import com.github.pagehelper.PageInfo;
import com.windchime.blog.entity.Blog;
import com.baomidou.mybatisplus.extension.service.IService;
import com.windchime.blog.entity.vo.BlogSearch;
import com.windchime.blog.entity.vo.status.EditAppreciate;
import com.windchime.blog.entity.vo.status.EditCommentable;
import com.windchime.blog.entity.vo.status.EditPublished;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 博客表 服务类
 * </p>
 *
 * @author WindChime
 * @since 2021-08-03
 */
public interface BlogService extends IService<Blog> {

    /**
     * 添加博客
     * @param blog 博客
     * @return true
     */
    boolean saveBlog(Blog blog);

    /**
     * 分页查询带条件
     * @param page 当前页
     * @param limit 当前页条目数
     * @param blogSearch 条件
     * @return blogs
     */
    PageInfo<Blog> selectBlogList(Integer page, Integer limit, BlogSearch blogSearch);

    /**
     * 修改发布状态
     * @param editPublished vo对象
     * @return true
     */
    boolean editPublished(EditPublished editPublished);

    /**
     * 修改赞赏状态
     * @param editAppreciate vo对象
     * @return true
     */
    boolean editAppreciate(EditAppreciate editAppreciate);

    /**
     * 修改评论状态
     * @param editCommentable vo对象
     * @return true
     */
    boolean editCommentable(EditCommentable editCommentable);

    /**
     * 前台--查询最热博文
     * @return blogList
     */
    List<Blog> selectHotBlogs();

    /**
     * 前台--通过分类ID查询该分类有多少篇博客--需要发布后的
     * @param id 分类ID
     * @return num
     */
    Integer typeHasBlogsByTypeId(Integer id);

    /**
     * 前台--设置每个分类ID下的博客
     * @param page 当前页
     * @param limit 当前页条目数
     * @param id 当前分类ID
     * @return blogs
     */
    PageInfo<Blog> selectBlogListByTypeId(Integer page, Integer limit, Integer id);

    /**
     * 前台--通过标签ID查询该分类有多少篇博客--需要发布后的
     * @param id 标签ID
     * @return num
     */
    Integer tagHasBlogsByTagId(Integer id);

    /**
     * 设置以年归档
     * @return archiveBlogs
     */
    Map<String, List<Blog>> archiveBlog();

    /**
     * 前台--搜索服务所需分页
     * @param page 当前页
     * @param limit 当前页条目数
     * @param query 搜索条件
     * @return blogs
     */
    PageInfo<Blog> selectBlogListByQuery(Integer page, Integer limit, String query);

    /**
     * 根据ID查询博客--内容通过markdown工具转换
     * @param id 博客ID
     * @return blog 博客对象
     */
    Blog getBlogForConvert(Long id);

    /**
     * 前台--设置每个标签ID下的博客
     * @param page 当前页
     * @param limit 当前页条目数
     * @param id 当前标签ID
     * @return blogs
     */
    PageInfo<Blog> selectBlogListByTagId(Integer page, Integer limit, Integer id);
}
